本文是我在自学 Python 3.5 中遇到的一些知识梳理和一些技巧分享,Python 在简洁性、易读性以及可扩展性上优势明显,使用率呈线性增长,如果你想去学习一门新的设计语言或是开开眼界,那么我非常推荐你这个优美的能写出乐趣的语言 Python
基础知识
引用
1 2 3 4 5
| a = 'ABC' b = a a = 'XYZ' print(b) \# 'ABC' b = a 使 b 指向的'ABC'地址,所以 b 没有被修改
|
转义
1 2 3
| \t 表示一个制表符 \\ 表示 \ 字符本身 r'...' 表示不需要转义 但不能表示多行也不能表示包含' 和 '' 的字符串(可用 r'''...''' 解决)
|
编码
1 2
| 如果中文字符串在 Python 环境下遇到 UnicodeDecodeError,这是因为 .py 文件保存的格式有问题。可以在第一行添加注释 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8
|
计算
1 2 3
| and or 均有短路计算(类似 Java 中 && ||) 因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True 返回结果为计算终止项
|
集合
1
| 当索引数字为负数时,表示逆序读出 List 中的内容,记住 List 的最后一个空间的编号为 -1 开始
|
1
| 单元素 tuple 时有歧义,Python 规定,单元素 tuple 要多加一个逗号 ",",t = (1,),多元素 tuple 最后加不加 "," 结果一样
|
1 2 3
| 1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict
|
网络
1 2
| POST 请求下面必须加 {% csrf_token %} 否则403(安全) 跨站请求伪造(英语:Cross-site request forgery)
|
兼容 (Python 2 & Python 3)
1 2 3 4
| urllib2-Python 官方基础模块 requests - 强大第三方包 Python 3.x中 urllib 库和 urilib2 库合并成了 urllib 库 其中 urllib2.urlopen() 变成了 urllib.request.urlopen() urllib2.Request() 变成了 urllib.request.Request()
|
1 2 3 4 5 6 7 8 9 10 11 12
| 去除了 <>,全部改用 != 去除 ``,全部改用 repr() 关键词加入 as 和 with,还有 True, False, None 整型除法返回浮点数,要得到整型结果,请使用// 加入 nonlocal 语句,使用noclocal x 可以直接指派外围(非全局)变量 去除 print 语句,加入 print() 函数实现相同的功能。同样的还有 exec 语句,已经改为 exec() 函数 改变了顺序操作符的行为,例如 x < y ,当 x 和 y 类型不匹配时抛出 TypeError 而不是返回随机布尔值 输入函数改变了,删除了 raw_input,用 input 代替 去除元组参数解包。不能 def(a, (b, c)):pass 这样定义函数了 Python3 字符串只有 str 一种类型,但它跟 2.x版本的 unicode 几乎一样 Python3 去除了 long 类型 大量模块变动
|
内建函数 BIF(built-in functions)
1 2
| zip() 函数 可以把两个集合合并成一个集合 zip([10,20,30], ['a','b','c']) -> [(10, 'a'), (20, 'b'), (30, 'c')]
|
特殊方法(魔术方法)
1 2 3 4 5 6
| 特殊方法定义在 class 中,不需要直接调用,某些函数或操作符会调用对应的特殊方法 用于print的__str__(类似toString) 用于len的__len__ 用于cmp的__cmp__ (Py3中已经移除, 需要引入 operator 模块 operator.eq(a, b)) 直接调用实力对象 重写__call__ __str__()用于显示给用户,而__repr__()用于显示给开发人员
|
三方模块管理工具
1.easy_install 2.pip 官方推荐,已内置到2.7.9
Exception
1
| raise Exception("") (类似于 throw)
|
Database
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Database API https://www.python.org/dev/peps/pep-0249/ #官方接口规范 v2.0 访问数据库流程 1.创建 connection 2.获取 cursor 3.执行命令/处理数据 4.关闭 cursor 5.关闭 connection connection 对象支持的方法 · cursor() # 使用该连接创建并返回游标 · commit() # 提交当前事务 · rollback() # 回滚当前事务 · close() # 关闭连接 事务: 访问和更新数据库的一个程序执行单元 - 原子性:事务中包括的诸操作要么都做,要么都不做 - 一致性:事务必须使数据库从一致性状态变到另一个一致性状态 - 隔离性:一个事务的执行不能被其他事务干扰 - 持久性:事务一旦提交,它对数据库的改变就是永久性的 开发中使用事务 · 关闭自动 commit: 设置 conn.autocommit(false) (mysql db 默认 false) · 正常结束事务: conn.commit() · 异常结束事务: conn.rollback()
|
Hacks 小技巧
1 2
| int() 函数可以把字符串转换为整数 默认按十进制 第二参数 base='10' 中偏函数 int2 = functools.partial(int, base=2) #调用按二进制
|